import java.util.List;

/**
 * Defines the requirements of a Vertex class.
 * 
 * The generic argument given to this class should be the implementing class
 * itself. The purpose of this is to allow classes that return Vertex types to
 * return the actual, implementing class, thus avoiding casts.
 * 
 * @param <V>
 *            The implementing type
 */
public interface Vertex<V extends Vertex<V>> {

	/**
	 * Returns the list of vertices adjacent to this Vertex.
	 * 
	 * @return This Vertex's neighbors
	 */
	public List<Pair<V>> getAdjacent();
}
